package com.example.base_model.network.load

/**
 * @Author: jiangKunKun
 * @CreateDate: 2025/11/4
 * @Description: 定义加载UI状态的接口。
 * @SpittingGrooves:
 */
interface LoadingUiState {
    /**
     * 存储不同加载策略的加载组，以及每个组中正在进行的加载操作的数量。
     * Key是LoadingStrategy，Value是正在进行的加载操作的数量。
     */
    val loadingGroups: Map<LoadingStrategy, Int>

    /**
     * 创建一个更新了加载状态的新UiState实例。
     * 这是实现无反射方案的关键方法。
     * @param groups 包含新加载状态的映射。
     * @return 包含更新加载状态的新LoadingUiState实例。
     */
    fun copyWithLoading(groups: Map<LoadingStrategy, Int>): LoadingUiState

    /**
     * 检查指定加载策略下是否有正在进行的加载操作。
     * @param strategy 要检查的加载策略，默认为MAIN。
     * @return 如果有正在进行的加载操作，则返回true；否则返回false。
     */
    fun isLoading(strategy: LoadingStrategy = LoadingStrategy.MAIN): Boolean {
        return (loadingGroups[strategy] ?: 0) > 0
    }
}